/**
 * @file         bsc_msg_rtp_upper.h
 * @brief        双mcu远程块数据传输组件 —— 应用数据操作接口
 * @note         对外公布
 * @author       Jpz(jinpuzhao@hopechart.com, 靳普诏)
 * @data         2022-12-16
 * @version      1.0
 *
 * @par          修改日志
 * <table>
 * <tr><th>Date        <th>Version               <th>Author          <th>Description
 * <tr><td>2022-12-16    <td>1.0                   <td>Jpz             <td>创建初始版本
 * @copyright    杭州鸿泉物联网技术股份有限公司
 */

#ifndef _BSC_MSG_RTP_UPPER_H_
#define _BSC_MSG_RTP_UPPER_H_

#include "bsc_msg_rtp_common.h"

#ifdef __cplusplus
extern "C"
{
#endif

// typedef Pointer IBsMsgRtpUpper;

typedef struct IBsMsgRtpUpperTag IBsMsgRtpUpper;
struct IBsMsgRtpUpperTag
{
    void *user_param_;  ///< 用户参数
    TBsMsgRtpDoNotifyMethod method_;  ///< 通知回调
};


/**
 * 枚举获取当前缓存区中等待发送的消息包，用于检查当前缓存中存储情况
 * @param *self         应用接口对象
 * @param *user_param   用户参数
 * @param callback      触发回调.每个消息触发一次.(为NULL时，直接返回缓存中等待发送消息包个数)
 * @return 成功 >= 0 返回等待发送的消息包个数
 *         失败 <  0
 */
Int32 IBsMsgRtpUpperEnumData(IBsMsgRtpUpper *self, void *user_param, TBsMsgRtpDoEnumCallBack callback);

/**
 * 发送数据块
 * @note 数据块大小由接口对象所属框架初始化时cfg设定的长度，在此处不再做长度判断。
 *       内部通过指针偏移获取底层操作接口
 * @param *self      应用接口对象
 * @param sent_times 发送次数设定。（输入范围 [1: 254], 0直接返回成功）
 * @param *data      数据块地址
 * @return 成功 >= 0
 *         失败 <  0, (参见，错误码网站解析结果)
 */
Int32 IBsMsgRtpUpperSentData(IBsMsgRtpUpper *self, UInt8 sent_times, const Int8 *data, UInt16 data_size);

/**
 * 设置接收通知回调方法
 * @param *self         应用接口对象
 * @param notify        通知回调(@ref TBsMsgRtpOnNotify)[@file bsc_msg_rtp_common.h]
 * @param *user_param   用户参数
 * @return 
 */
void IBsMsgRtpUpperSetNotifyMethod(IBsMsgRtpUpper *self, TBsMsgRtpDoNotifyMethod notify, void *user_param);


/**
 * 取消发送
 * @param *self         应用接口对象
 * @param sent_times
 * @param *data
 * @param data_size
 * @return 成功 >= 0, 返回0 表示缓存中不存在相同内容消息包. 返回>0 表示取消了几帧数据
 *         失败 <  0
 * @note 暂未实现
 */
// Int32 IBsMsgRtpUpperCancelData(IBsMsgRtpUpper *self, const Int8 *data, UInt16 data_size);

#ifdef __cplusplus
}  ///< extern "C"
#endif

#endif  ///< _BSC_MSG_RTP_UPPER_H_


